//使用 posix标准 中的信号量处理线程以及进程同步
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
#include <semaphore.h>
//int sem_init(sem_t *sem, int pshared, unsigned int value); 

//全局变量是为了父子线程都能访问到
sem_t g_sem;

void * start_routine(void *arg){
	int i = 10;
	
	//3、P 操作阻塞，资源--
	sem_wait(&g_sem);
	
	printf("start_routine()---->start\n");	
	while(i > 0){
		printf("i = [%d]\n", i);
		i--;
		usleep(100);
	}
 	printf("start_routine()---->end\n");
	return NULL;
}

//sem_destroy(3), sem_post(3), sem_wait(3)
int main(int argc, char *argv[]){
	pthread_t ptid;
	int j = 1;

	//1、初始化信号量：信号量； 0是线程同步，1是进程同步；0是信号量的初始值
	sem_init(&g_sem, 0, 0);
	
	int ret = pthread_create(&ptid, NULL, start_routine, NULL);
	if(ret < 0){
		printf("pthread_create() error:\n");
		exit(-1);
	}

	printf("main--> start\n");
	while(j <= 10){
		printf("j = [%d]\n", j);
		j++;
		usleep(100);
	}	
	printf("main--> end\n");
	//2、V操作 接触sem_wait() 阻塞，信号量++
	sem_post(&g_sem);
	
	pthread_join(ptid, NULL);
	
	//销毁信号量
	sem_destory(&g_sem);
	return 0;
}
